home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
oper_sys
/
oasis
/
oasisegs.lha
/
egs
/
queena.d
< prev
next >
Wrap
Text File
|
1992-04-23
|
1KB
|
38 lines
class queen {
constant: int max = 800;
int n = 10;
attribute:
protected int count = 0;
int[_,_] all = $[max,n];
method:
public run (int[_] Q; int ?Count; int[_,_] ?All).
queen (int[_] Q; int N, Size).
more (int[_] Q; int N, M, Size).
safe (int[_] Q; int M, I, N).
copy (int K, I; int[_] Q).
}
queen {
run(Q':$[N'],count,all) |- queen(Q,0,N).
queen(Q',N',N) |- copy(count,N-1,Q);
count' = count+1.
queen(Q',N',Size') |- more(Q,N,0,Size).
more(_, _, M',M).
more(Q',N',M',Size') :- safe(Q,M,1,N) |-
Q[N]' = M;
queen(Q,N+1,Size);
more(Q,N,M+1,Size).
more(Q',N',M',Size') |- more(Q,N,M+1,Size).
safe(_, _, I',I-1).
safe(Q',M',I',N') |- (int) X'= Q[N-I];
M <> X;
M <> X+I;
M <> X-I;
safe(Q,M,I+1,N).
copy(K',0, Q') |- all[K,0]' = Q[0].
copy(K',I',Q') |- all[K,I]' = Q[I]; copy(K,I-1,Q).
}